﻿package kit4j.view.cs.component;

/**
 * 背景图像布局属性类型，可通过该类型对象的多个属性策略确定背景图像在显示区域中的布局。<br />
 * BackgroundConstraints对象的属性优先策略说明如下：<br />
 * 1.如果position属性值为BackgroundConstraints.ABSOLUTE
 * ，则图像的fill属性失效，图像的第一次重复的左上角坐标由x和y属性值确定，图像的显示宽度与高度由width和height属性值确定；
 * 2.如果repeat属性设置为在某个方向上重复，则该方向上的fill属性失效；
 * 3.如果fill属性设置为在某个方向上调整，且position属性值不为BackgroundConstraints.ABSOLUTE，
 * 则position属性失效。
 * 
 * @author MiniKnife
 * 
 */
public class BackgroundConstraints {

	/**
	 * 背景图相对显示区域的放置位置。
	 * 可选值为以下之一：NORTH,WEST,SOUTH,EAST,NORTHWEST,NORTHEAST,SOUTHWEST,
	 * SOUTHEAST,CENTER,ABSOLUTE。
	 */
	public int position;

	/**
	 * 将背景图置于显示区域的顶部，并在垂直方向居中。
	 */
	public static final int NORTH = 1;

	/**
	 * 将背景图置于显示区域的左部，并在水平方向居中。
	 */
	public static final int WEST = 2;

	/**
	 * 将背景图置于显示区域的底部，并在垂直方向居中。
	 */
	public static final int SOUTH = 3;

	/**
	 * 将背景图置于显示区域的右部，并在水平方向居中。
	 */
	public static final int EAST = 4;

	/**
	 * 将背景图置于显示区域的左上角。
	 */
	public static final int NORTHWEST = 5;

	/**
	 * 将背景图置于显示区域的右上角。
	 */
	public static final int NORTHEAST = 6;

	/**
	 * 将背景图置于显示区域的左下角。
	 */
	public static final int SOUTHWEST = 7;

	/**
	 * 将背景图置于显示区域的右下角。
	 */
	public static final int SOUTHEAST = 8;

	/**
	 * 将背景图置于显示区域的中心，并在垂直和水平方向居中。
	 */
	public static final int CENTER = 9;

	/**
	 * 将背景图以x和y值为坐标定位在显示区域的指定位置。
	 */
	public static final int ABSOLUTE = 0;

	/**
	 * 图像左上角的X轴坐标。
	 */
	public int x;

	/**
	 * 图像左上角的Y轴坐标。
	 */
	public int y;

	/**
	 * 图像显示的宽度值。
	 */
	public int width;

	/**
	 * 图像显示的高度值。
	 */
	public int height;

	/**
	 * 背景图的横纵拉伸压缩属性。 当背景图小于显示区域时，设置结果为背景图在某个方向上拉伸以适应显示区域；当背景图大于显示区域时，
	 * 设置结果为背景图在某个方向上被压缩显示。 可选值为以下之一：NONE,HORIZONTAL,VERTICAL,BOTH。
	 */
	public int fill;

	/**
	 * 图片重复选项。当图片小于显示区域时，可设置图片在水平与垂直方向上重复显示。
	 * 可选值为以下之一：NONE,HORIZONTAL,VERTICAL,BOTH。
	 */
	public int repeat;

	/**
	 * 不调整或重复图片。
	 */
	public static final int NONE = 0;

	/**
	 * 在水平方向上调整或重复图片。
	 */
	public static final int HORIZONTAL = 1;

	/**
	 * 在垂直方向上调整或重复图片。
	 */
	public static final int VERTICAL = 2;

	/**
	 * 在水平与垂直方向同时调整或重复图片。
	 */
	public static final int BOTH = 3;

	/**
	 * 构建一个BackgroundConstraints对象，默认position属性值为BackgroundConstraints.CENTER，
	 * x属性值为0，y属性值为0，width属性值为0，height属性值为0，fill属性值为BackgroundConstraints.NONE，
	 * repeat属性值为 BackgroundConstraints.NONE。
	 */
	public BackgroundConstraints() {
		this(CENTER, 0, 0, 0, 0, NONE, NONE);
	}

	/**
	 * 构建一个BackgroundConstraints对象。x,、y、width、height属性值默认为0。
	 * 
	 * @param position
	 *            定位属性值
	 * @param fill
	 *            图像尺寸调整属性值
	 * @param repeat
	 *            图像重复模式
	 */
	public BackgroundConstraints(int position, int fill, int repeat) {
		this(position, 0, 0, 0, 0, fill, repeat);
	}

	/**
	 * 构建一个BackgroundConstraints对象。x和y属性值默认为0。
	 * 
	 * @param position
	 *            定位属性值
	 * @param x
	 *            图像左上角的横坐标，当且仅当position属性为ABSOLUTE时有效。
	 * @param y
	 *            图像左上角的纵坐标，当且仅当position属性为ABSOLUTE时有效。
	 * @param fill
	 *            图像尺寸调整属性值
	 * @param repeat
	 *            图像重复模式
	 */
	public BackgroundConstraints(int position, int x, int y, int width,
			int height, int fill, int repeat) {
		this.position = position;
		this.x = x;
		this.y = y;
		this.width = width;
		this.height = height;
		this.fill = fill;
		this.repeat = repeat;
	}

	public String toString() {
		StringBuilder str = new StringBuilder();

		str.append(getClass().getCanonicalName());
		str.append("[");
		str.append("position=");
		str.append(position);
		str.append(",x=");
		str.append(x);
		str.append(",y=");
		str.append(y);
		str.append(",width=");
		str.append(width);
		str.append(",height=");
		str.append(height);
		str.append(",fill=");
		str.append(fill);
		str.append(",repeat=");
		str.append(repeat);
		str.append("]");

		return str.toString();
	}
}
